package com.yinp.proapp.utils;


import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.util.Log;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

import com.yinp.tools.R;

public class LoadUtils {
    private volatile static LoadUtils loadUtils = null;
    private Dialog mDialog;
    private SparseArray<Dialog> sparseArray = new SparseArray<>();

    public static LoadUtils getInstance() {
        if (loadUtils == null) {
            synchronized (LoadUtils.class) {
                if (loadUtils == null) {
                    loadUtils = new LoadUtils();
                }
            }
        }
        return loadUtils;
    }

    public void builder(Context context, String text) {
        builder(context, text, true);
    }

    public void builder(Context context, String text, boolean isSingle) {
        if (isSingle && mDialog == null) {
            //表示只有一个dialog
            getDialog(context, text, true);
        } else if (!isSingle) {
            //表示每次创建一个dialog
            getDialog(context, text, false);
        }
        if (mDialog != null) {
            mDialog.show();
        }
    }

    private void getDialog(Context context, String text, boolean isSingle) {
        // 获取Dialog布局
        @SuppressLint("InflateParams") View view = LayoutInflater.from(context).inflate(R.layout.dialog_loading, null);
        TextView tipTextView = view.findViewById(R.id.tipTextView);// 提示文字

        if (text.isEmpty()) {
            tipTextView.setVisibility(View.GONE);
        } else {
            tipTextView.setVisibility(View.VISIBLE);
            tipTextView.setText(text);
        }
        // 定义Dialog布局和参数
        mDialog = new Dialog(context, R.style.NormalDialogStyle);
        mDialog.setCancelable(true); // 是否可以按“返回键”消失
        mDialog.setCanceledOnTouchOutside(false); // 点击加载框以外的区域
        mDialog.setContentView(view);// 设置布局
        /**
         *将显示Dialog的方法封装在这里面
         */
        Window window = mDialog.getWindow();
        assert window != null;
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setGravity(Gravity.CENTER);
        window.setAttributes(lp);
        if (!isSingle)
            sparseArray.put(sparseArray.size(), mDialog);
    }

    public void close() {
        if (sparseArray.size() > 0) {
            for (int i = 0; i < sparseArray.size(); i++) {
                Dialog dg = sparseArray.get(i);
                if (dg != null && !dg.getOwnerActivity().isDestroyed() && dg.isShowing()) {
                    dg.dismiss();
                }
            }
            sparseArray.clear();
        } else {
            if (mDialog != null &&  mDialog.isShowing()) {
                mDialog.dismiss();
            }
        }
    }

    /**
     * 在提供上下文的类关闭时，需要调用此方法，否则会造成内存泄漏
     */
    public void setNull() {
        if (mDialog != null) {
            mDialog = null;
        }
    }
}
